// 自定义plugin：
// 功能：将js文件中的注释删除调

// 自定义插件
// 自定义插件必须是一个函数，或者包含apply方法的对象
// plugin根据webpack生命周期钩子函数开发的：https://webpack.docschina.org/api/compiler-hooks/#hooks
// compiler.hooks可以访问钩子
// 功能：清除打包过程中的注释
class MyPlugin {
    apply (compiler){
      console.log('MyPlugin 启动')
  
      // emit钩子的执行时机是：输出打包好的资源文件 asset 到 output 目录之前执行。
      compiler.hooks.emit.tap('MyPlugin', compilation => {
        // compilation => 可以理解为此次打包的结果
        // compilation.assets => 获取dist目录的所有生成的资源文件信息，例如：bundle.js
        for (const name in compilation.assets) {
          // console.log(name)
  
          // 获取到资源的内容，例如：bundle.js里面的内容
          console.log(compilation.assets[name].source())
  
          // 判断文件是否为js文件
          if (name.endsWith('.js')) {
            // 替换掉js文件中的注释
            const contents = compilation.assets[name].source()
            const withoutComments = contents.replace(/\/\*\*+\*\//g, '')
  
            // 覆盖原有内容
            compilation.assets[name] = {
              source: () => withoutComments, // 新的内容
              size: () => withoutComments.length // 内容的大小，webpack必须的方法
            }
          }
        }
      })
    }
}


module.exports = MyPlugin